import router from './router'
// import router from './router/index-v1.js'
import store from './store'
// import { Message } from 'element-ui'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken, setToken } from '@/utils/auth'
import { getUrlParamsKey } from '@/utils/util'
// import { isRelogin } from '@/utils/request'
// let isRelogin ={
//     show:false
// }

NProgress.configure({ showSpinner: false })
// 获取页面是否设置权限。
function getPageRoles(to, from, next, userRoles) {
// 如果该用户没有任何配置权限，则县跳转到首页
    if(userRoles.length<1){    
        next('/');
    }
    let pageMeta = to.meta.roles;
    // 如果该页面没有配置 路由权限，则直接进入
    if (!pageMeta) {
        console.log(`该页面没有配置路由权限，直接进入`)
        next();
    } else {
        // 如果配置了，则判断该用户是否有权限,如果没有权限则跳转到 404
        if (pageMeta.includes(userRoles[0])) {
            console.log(`该用户有该页面的权限，可以进入该页面~`)
            next()
        } else {
            console.log(`没有权限，进入404页面~`)
            next('/404')
        }
    }
}


// 定义白名单，用于判断是否可以直接放开
// const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
const whiteList = ['/login', '/404']

router.beforeEach((to, from, next) => {
    NProgress.start()
    // 设置浏览器中显示的标题
    if (to.meta.title) {
        document.title = to.meta.title
    }
    // 有token ，需要判断是否有今天该页面的权限
    if (getToken()) {
        /* has token*/
        if (to.path === '/login') {
            next({ path: '/' })
        } else {

            // 获取缓存的 权限信息
            const storeRoles = store.getters.userRoles;
            console.log(`storeRoles =============================== `)
            console.log(storeRoles)
            if (storeRoles && storeRoles.length > 0) {
                getPageRoles(to, from, next, storeRoles);
            } else {
                console.log(`没有获取到缓存~`)
                // 判断当前用户是否已拉取完user_info信息
                store.dispatch('user/getInfo').then(res => {
                    let resRoles = res.roles;
                    getPageRoles(to, from, next, resRoles);
                }).catch(err => {
                    console.log(err)
                    store.dispatch('user/logOut').then(() => {
                        // Message.error(err)
                        next({ path: '/' })
                    }).catch(err => {
                        console.log(err)
                    })
                })
            }
        }
    } else {
        // 没有token，判断地址栏里是否有uuid，如果有则缓存到本地，并跳转到首页
        let getUuid = getUrlParamsKey('uuid')
        if (getUuid) {
            console.log('getUuid ===================================== ')
            setToken(getUuid);
            next({ path: '/' })
        } else if (whiteList.indexOf(to.path) >= 0) { // 没有token, 在免登录白名单，直接进入
            console.log('000============================')
            next()
        } else {
            console.log('1111111')
            // next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页

            let getSearch = location.search;
            // 如果当前有重定向的值，则需要把参数拼接再？后边，判断当前url 是否有传递参数，
            // 如果有参数，重新修改设置一下
            if (getSearch) {
                console.log('22222222222222222222')
                next(`/login${getSearch}&redirect=${to.fullPath}`)
            } else {
                console.log('333========')
                next(`/login?redirect=${to.fullPath}`)
            }
            // 否则全部重定向到登录页
            /* next({
                path:`/login`,
                query:{
                    ...to.query,
                    redirect:to.fullPath
                }
            }) */
        }
    }
})

router.afterEach(() => {
    NProgress.done()
})
